using System;

namespace HEFramework
{
    /// <summary>
    ///
    /// 静态字段需加此标签
    /// 
    /// ----------------------------------------
    /// 作者 hep
    /// 创建时间：2023-11-29 13:50:29
    /// ----------------------------------------
    /// </summary>
    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
    public class StaticFieldAttribute : Attribute
    {
    }


    /// <summary>
    ///
    /// 自定义标签
    /// 
    /// ----------------------------------------
    /// 作者 hep
    /// 创建时间：2023-11-29 10:01:36
    /// ----------------------------------------
    /// </summary>
    [AttributeUsage(AttributeTargets.Class)]
    public class CustomAttribute : Attribute
    {
    }

    /// <summary>
    ///
    /// 实体系统标签（声明哪些类和方法属于框架的）
    /// 
    /// ----------------------------------------
    /// 作者 hep
    /// 创建时间：2023-11-29 10:01:36
    /// ----------------------------------------
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class EntitySystemAttribute : CustomAttribute
    {
    }

    /// <summary>
    ///
    /// 更新代码标签（数据如果需要重新加载时）
    /// 
    /// ----------------------------------------
    /// 作者 hep
    /// 创建时间：2023-11-29 15:44:37
    /// ----------------------------------------
    /// </summary>
    public class CodeAttribute : CustomAttribute
    {
    }


    /// <summary>
    ///
    /// 事件标签
    /// 
    /// ----------------------------------------
    /// 作者 hep
    /// 创建时间：2023-11-30 11:09:35
    /// ----------------------------------------
    /// </summary>
    public class EventAttribute : CustomAttribute
    {
        public eSceneType ESceneType { get; }

        public EventAttribute(eSceneType eSceneType)
        {
            this.ESceneType = eSceneType;
        }
    }

    /// <summary>
    ///
    /// 方法标签
    /// 
    /// ----------------------------------------
    /// 作者 hep
    /// 创建时间：2023-11-30 11:12:41
    /// ----------------------------------------
    /// </summary>
    public class InvokeAttribute : CustomAttribute
    {
        public long Type { get; }

        public InvokeAttribute(long _type = 0)
        {
            this.Type = _type;
        }
    }
}